<?php
require_once('Team.php');
require_once('Track.php');
require_once('Statistics\\GlobalStatistics.php');
/**
 * Verwaltet die einzeln zu erstellenden Serien.
 * "Master-Klasse"
 *
 * @author Timo
 */
class Series {
    private $id                = 0;
    private $league_id         = 0;
    private $shortcut          = 'msp';
    private $drivers           = array();
    private $teams             = array();
    private $locations         = array();
    private $used_slots        = 0;
    private $max_slots         = 24; // Maximale Anzahl an Fahrern in der Serie. (Default: 24)
    private $max_driversInTeam = 2;  // Maximale Anzahl an Fahrern pro Team. (Default: 2)
    private $races             = 10; // Gesamtanzahl an Rennen in der Serie. (Default: 10)
    private $stats             = null;
    private $numOfRuns         = 1; // Anzahl der Läufe an einem Renntag. Z.B. in Race07 -> 2 anstatt 1 (Default: 1)
    private $oneVehiclePerTeam = false; // Wenn TRUE -> Jeder Fahrer im Team muss den gleichen Wagen fahren..
    private $season            = 1; // aktuelle Saison
    
/**
 * Konstruktor der ggf. Statistiken lädt.
 * Hinweis: Sollte auf "False" gestellt werden,
 *          wenn man Aktionen durchführt, die
 *          sich nicht auf die Statistiken auswirken.
 *          Dadurch werden sie nicht erst unnötigerweise geladen.
 *
 * @author Timo
 */
    function Series($load = false)
    {
        if($load)
        {
            $this->stats = new GlobalStatistics();
            $this->stats->Load();
        }
    }

/**
 * Fügt einzelne Fahrer der Serie hinzu.
 *
 * @author Timo
 */
    public function AddDriver($driver)
    {
        if($driver instanceof Driver)
        {
            if(($this->used_slots + 1) <= $this->max_slots)
            {
                $this->drivers[] = $driver;
                $this->used_slots++;
            }
            else
            {
                echo 'Maximale Anzahl an Fahrern (' . $this->max_slots . ') überschritten.<br>
                    Hinzufügen des Fahrers "' . $driver->GetName() . '" nicht möglich.';
            }
        }
        else
        {
            echo $driver . ' is not a Driver-Object.';
        }
    }

/**
 * Fügt ein Team der Serie hinzu.
 *
 * @author Timo
 */
    public function AddTeam($team)
    {
        if($team instanceof Team)
        {
            if(($this->used_slots + $team->GetDriverCount()) <= $this->max_slots)
            {
                $this->teams[] = $team;
                $this->used_slots + $team->GetDriverCount();
            }
            else
            {
                echo 'Maximale Anzahl an Fahrern (' . $this->max_slots . ') überschritten.<br>'
                   . 'Hinzufügen des Teams "' . $team->GetName() . '" nicht möglich.';
            }
        }
        else
        {
            echo $team . 'is not a Team-Object.';
        }
    }

    public function SetLeagueID($id)
    {
        if(is_integer($id))
        {
            $this->league_id = $id;
        }
        else
        {
            echo $id . 'is not an integer.';
        }
    }

    public function SetSeason($iSeason)
    {
        if(is_integer($iSeason))
        {
            $this->league_id = $iSeason;
        }
        else
        {
            echo $iSeason . ' is not an integer.';
        }
    }
    
    public function SetShortcut($shortcut)
    {
        if(is_string($shortcut))
        {
            if(strlen($shortcut) <= 10)
            {
                $this->shortcut = $shortcut;
            }
            else
            {
                echo $shortcut . 'is too long.';
            }
        }
        else
        {
            echo $shortcut . 'is not a string.';
        }
    }

    public function SetRaces($races)
    {
        if(is_integer($races))
        {
            $this->races = $races;
        }
        else
        {
            echo $races . 'is not an integer.';
        }
    }

/**
 * Setzt maximale Anzahl an Fahrern in der Serie.
 *
 * @author Timo
 */
    public function SetMaxSlots($slots)
    {
        if(is_integer($slots))
        {
            $this->max_slots = $slots;
        }
        else
        {
            echo $slots . 'is not an integer.';
        }
    }

/**
 * Setzt maximale Anzahl an Fahrern pro Team.
 *
 * @author Timo
 */
    public function SetMaxDriversInTeam($maxDrivers)
    {
        if(is_integer($maxDrivers))
        {
            $this->max_driversInTeam = $maxDrivers;
        }
        else
        {
            echo $maxDrivers . 'is not an integer.';
        }
    }

    public function SetNumOfRuns($runs)
    {
        if(is_integer($runs))
        {
            $this->numOfRuns = $runs;
        }
        else
        {
            echo $runs . 'is not an integer.';
        }
    }
    
    public function SetOneVehiclePerTeam($bool)
    {
        if(is_bool($bool))
        {
            $this->oneVehiclePerTeam = $bool;
        }
        else
        {
            echo $bool . 'is not a boolean.';
        }   
    }

    public function GetSeason()
    {
        return $this->season;
    }

    public function GetID()
    {
        return $this->id;
    }
    
    public function GetLeagueID()
    {
        return $this->league_id;
    }

    public function GetRaces()
    {
        return $this->races;
    }

    public function GetShortcut()
    {
        return $this->shortcut;
    }

/**
 * Gibt maximale Anzahl an Fahrern in der Serie zurück.
 *
 * @author Timo
 */
    public function GetMaxSlots()
    {
        return $this->max_slots;
    }

/**
 * Gibt maximale Anzahl an Fahrern pro Team zurück.
 *
 * @author Timo
 */
    public function GetMaxDriversInTeam()
    {
        return $this->max_driversInTeam;
    }

/**
 * Gibt Strecke in Rennen '$nr' zurück.
 * Bspw. GetLocation(5); -> Gibt Strecke vom fünften Rennen zurück..
 *
 * @author Timo
 */
    public function GetLocation($nr)
    {
        try
        {
            return $this->locations[$nr];
        }
        catch (Exception $ex)
        {
            echo $ex;
            return -1;
        }
    }
    
    public function GetOneVehiclePerTeam()
    {
        return $this->oneVehiclePerTeam;
    }
}
?>
